package org.onvivals.app.mqtt.util;

import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.dreamlu.iot.mqtt.spring.server.MqttServerTemplate;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: Mr.ZS
 * @Date: 2024/9/26 下午5:28
 * @company 湖南葆龄科技有限公司
 **/
@Slf4j
@Component
@AllArgsConstructor
public class PlayUtil {

    private static final String TOPIC_PATTERN = "/%s/function/get";

	private static final String TOPIC_INFO = "/%s/info/get";

	private static final String TOPIC_OTA = "/%s/ota/get";

    private final MqttServerTemplate mqttServerTemplate;

    /**
     * 播放音频推送
     *
     * @return
     */
    public void play(String deviceNum, String video, String messageId, int index) {
        // 创建请求数据的Map
        Map<String, Object> map = new HashMap<>();
        map.put("messageId", messageId);
        map.put("video", video);
        map.put("index", index);

        try {
            // 使用格式化字符串替代字符串拼接，提高代码可读性
            String topic = String.format(TOPIC_PATTERN, deviceNum);
            byte[] message = JSON.toJSONString(map).getBytes();

            // 发布消息，若出现异常则捕获处理
            mqttServerTemplate.publishAll(topic, message);
            log.info("消息发布成功，主题: {}, 消息: {}", topic, new String(message));
        } catch (Exception e) {
            log.error("消息发布失败", e);
            // 这里可以根据业务需求做进一步的异常处理，例如重试机制等
        }
    }

	/**
	 * 播放音频推送
	 *
	 * @return
	 */
	public void info(String deviceNum, int volume) {
		// 创建请求数据的Map
		Map<String, Object> map = new HashMap<>();
		map.put("volume", volume);
		map.put("type", 0);
		try {
			// 使用格式化字符串替代字符串拼接，提高代码可读性
			String topic = String.format(TOPIC_INFO, deviceNum);
			byte[] message = JSON.toJSONString(map).getBytes();

			// 发布消息，若出现异常则捕获处理
			mqttServerTemplate.publishAll(topic, message);
			log.info("消息发布成功，主题: {}, 消息: {}", topic, new String(message));
		} catch (Exception e) {
			log.error("消息发布失败", e);
			// 这里可以根据业务需求做进一步的异常处理，例如重试机制等
		}
	}

	/**
	 * 播放音频推送
	 *
	 * @return
	 */
	public void infoRms(String deviceNum, float rms) {
		// 创建请求数据的Map
		Map<String, Object> map = new HashMap<>();
		map.put("volume", rms);
		map.put("type", 1);
		try {
			// 使用格式化字符串替代字符串拼接，提高代码可读性
			String topic = String.format(TOPIC_INFO, deviceNum);
			byte[] message = JSON.toJSONString(map).getBytes();

			// 发布消息，若出现异常则捕获处理
			mqttServerTemplate.publishAll(topic, message);
			log.info("消息发布成功，主题: {}, 消息: {}", topic, new String(message));
		} catch (Exception e) {
			log.error("消息发布失败", e);
			// 这里可以根据业务需求做进一步的异常处理，例如重试机制等
		}
	}

	public void ota(String deviceNum, String url) {
		// 创建请求数据的Map
		Map<String, Object> map = new HashMap<>();
		map.put("url", url);

		try {
			// 使用格式化字符串替代字符串拼接，提高代码可读性
			String topic = String.format(TOPIC_OTA, deviceNum);
			byte[] message = JSON.toJSONString(map).getBytes();

			// 发布消息，若出现异常则捕获处理
			mqttServerTemplate.publishAll(topic, message);
			log.info("消息发布成功 ota，主题: {}, 消息: {}", topic, new String(message));
		} catch (Exception e) {
			log.error("消息发布失败", e);
			// 这里可以根据业务需求做进一步的异常处理，例如重试机制等
		}
	}


}
